package com.java.generic;

/**
 * 泛型上下限
 */
public class LearnGenericLimits {
    // 泛型上限<? extends E>：泛型只能为E类或E子类。&表示多个限制同时满足
    static class UpperLimit<T extends Number & Comparable> { // T可为继承Number且实现Comparable的类，若Number实现Comparable也可
        private T var;
        
        public T getVar() {return var;}
        
        public void setVar(T var) {this.var = var;}
    }
    
    // 泛型下限<? super E>：泛型只能为E类或E父类。只能作为泛型约束传递，不能直接被定义为泛型类、接口或方法
    public static void func(UpperLimit<? super Integer> upperLimit) {}
    
    public static void main(String[] args) {
        // new UpperLimit<Number>(); // 类型形参Number不在其界限内，应实现Comparable
        new UpperLimit<Integer>();
        new UpperLimit<Long>();
        // new UpperLimit<String>(); // 类型形参String不在其界限内，应扩展Number
        
        // func(new UpperLimit<Number>()); // 类型形参Number不在其界限内，应实现Comparable
        func(new UpperLimit<Integer>());
        // func(new UpperLimit<Long>()); // 需要的类型UpperLimit <? super Integer>
    }
}
